package com.jiashihui.schema_lgorithm.schema.chain;

/**
 * @author jiashihui
 * @describe: TODO
 * @date 2019/03/13
 * <p>
 * 有多个对象，每个对象持有对下一个对象的引用，这样就会形成一条链，请求在这条链上传递，直到某一对象决定处理该请求。
 * 但是发出者并不清楚到底最终那个对象会处理该请求，所以，责任链模式可以实现，在隐瞒客户端的情况下，对系统进行动态的调整。
 * 注意点：
 * 链接上的请求可以是一条链，可以是一个树，还可以是一个环，模式本身不约束这个，需要我们自己去实现，同时，在一个时刻，命令只允许由一个对象传给另一个对象，而不允许传给多个对象。
 * (特别适合重构很长的if-else结构或者很长的switch-case结构的代码)
 */
public class ChainOfResponsibilityTest {
    public static void main(String[] args) {
        HandlerImpl ceoHandler = new HandlerImpl("CEO");
        HandlerImpl ctoHandler = new HandlerImpl("CTO");
        HandlerImpl pmHandler = new HandlerImpl("PM");
        HandlerImpl coderHandler = new HandlerImpl("coder");
        ceoHandler.setHandler(ctoHandler);
        ctoHandler.setHandler(pmHandler);
        pmHandler.setHandler(coderHandler);
        ceoHandler.handleRequest();
    }
}
